﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace JovensIPR.bean
{
    public class Person
    {
        #region [Atributos]
        private long handle;

        private string nome;

        private string email;

        private string senha;

        private Address endereco;

        private bool membro;

        private bool participaGrupo;

        private DateTime dataCadastro;

        private DateTime dataNascimento;

        public DateTime DataNascimento
        {
            get { return dataNascimento; }
            set { dataNascimento = value; }
        }

        private string dadosAdicional;

        public string DadosAdicional
        {
            get { return dadosAdicional; }
            set { dadosAdicional = value; }
        }

        public DateTime DataCadastro
        {
            get { return dataCadastro; }
            set { dataCadastro = value; }
        }

        private GrupoParticipacao grupoParticipacao;

        public GrupoParticipacao GrupoParticipacao
        {
            get { return grupoParticipacao; }
            set { grupoParticipacao = value; }
        }

        public bool ParticipaGrupo
        {
            get { return participaGrupo; }
            set { participaGrupo = value; }
        }

        public bool Membro
        {
            get { return membro; }
            set { membro = value; }
        }

        public Address Endereco
        {
            get { return endereco; }
            set { endereco = value; }
        }

        public string Senha
        {
            get { return senha; }
            set { senha = value; }
        }

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        public string Nome
        {
            get { return nome; }
            set { nome = value; }
        }

        public long Handle
        {
            get { return handle; }
            set { handle = value; }
        }
        #endregion

        #region [Public method]
        public string ValidationAttributesManatory()
        {
            string result = String.Empty;

            if (String.IsNullOrEmpty(this.email))
                result = MessageFailField("E-mail", TipoMessageField.Information);
            else if (!this.email.Contains('@') && !this.email.Contains('.'))
                result = "Digitação de e-mail inválido.";
            else if (String.IsNullOrEmpty(this.nome))
                result = MessageFailField("Nome", TipoMessageField.Information);
            else if (String.IsNullOrEmpty(this.senha))
                result = MessageFailField("Senha", TipoMessageField.Information);
            else if (String.IsNullOrEmpty(this.dataNascimento.ToString()))
                result = MessageFailField("Data nascimento", TipoMessageField.Select);
            else
                result = endereco.ValidationAttributesManatory();

            return result;
        }
        #endregion

        #region [Private method]
        private string MessageFailField(string local, TipoMessageField tipo)
        {
            string messageReturn = "{0} no campo \"{1}\" é obrigatória.";
            string message = String.Empty;

            switch (tipo)
            {
                case TipoMessageField.Information:
                    message = String.Format(messageReturn, "Digitação", local);
                    break;
                case TipoMessageField.Select:
                    message = String.Format(messageReturn, "Seleção", local);
                    break;
                default:
                    message = "O tipo de campo não foi encontrado.";
                    break;
            }
            
            return message;
        }
        #endregion
    }

    internal enum TipoMessageField
    {
        Information,

        Select,
    }
}